<?php

namespace app\admin\controller;
/**
 * 系统核心类
 * 含有（模块初始化，配置初始化，权限控制）
 */
class Index extends AdminCore {
	public function index() {
		return view();
	}
	public function config() {
		$this->assign ( '_Menu', $this->_GetMenu (['id'=>'id','children'=>'children']));
		return view();
	}
	public function console(){
		return view();
	}
	
	/**
	 * @Name ruserinfo
	 * @Title 更改资料
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年01月09日 
	 * @Site http:// www.thinkgms.com/
	 */
	public function ruserinfo(){
		$_Model		= model ( 'app\admin\model\User' );
		$_Db		= db ( 'User' );
		$_Validate	= validate ( 'app\admin\validate\User' );
        if (request()->isPost()) {
            $Parm = input('post.');
			$_Uid = _Is_Login();
			$_Data['id'] = $Parm['id'];
			$_Data['dept_id'] = $Parm['dept_id'];
			$_Data['job_jd'] = $Parm['job_jd'];
			$_Data['avatar'] = str_replace("\\","/",$Parm['avatar']);
			$_Data['username'] = $Parm['username'];
			if ($_Validate->scene('edit')->check($_Data)) {
                $_Return = $_Model->allowField ( true )->isUpdate ( true )->save($_Data, ['id' => $_Uid]);
                if ($_Return) {
					session('userinfo', _UInfo());
                    return _Code('200', "操作成功！");
                } else {
                    $_Error = $_Model->getError();
                    return _Code('202', $_Error ? $_Error : "操作失败！");
                }
            } else {
                $_Error = $_Validate->getError();
                return _Code('201', $_Error ? $_Error : "验证失败！");
            }
		}else{
			$_Type = input('type',0);
			if($_Type<1){
				return view();
			}else{
				$_Uid = _Is_Login();
				$_Info = $_Model->find($_Uid);
				if (!$_Info) {
					return _Code('102', "无此数据！");
				}
				unset($_Info['password']);
				return _Code('200', "", $_Info);
			}
		}
	}
	/**
	 * @Name rpassword
	 * @Title 更改密码
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年01月09日 
	 * @Site http:// www.thinkgms.com/
	 */
	public function rpassword(){
		$_Model		= model ( 'app\admin\model\User' );
		$_Db		= db ( 'User' );
		$_Validate	= validate ( 'app\admin\validate\User' );
        if (request()->isPost()) {
            $_Data = input('post.');
			$_Uid = _Is_Login();
			
			if ($_Validate->scene('rpassword')->check($_Data)) {
				if(md5($_Data['password']) != md5($_Data['password2'])){
					return _Code('101', "重复密码不一致！");
				}
				unset($_Data['password2']);
                $_Return = $_Model->allowField ( true )->isUpdate ( true )->save($_Data, ['id' => $_Uid]);
                if ($_Return) {
                    return _Code('200', "操作成功！");
                } else {
                    $_Error = $_Model->getError();
                    return _Code('202', $_Error ? $_Error : "操作失败！");
                }
            } else {
                $_Error = $_Validate->getError();
                return _Code('201', $_Error ? $_Error : "验证失败！");
            }
		}else{
			return view();
		}
	}
	
	/**
	 * 获取菜单
	 * 通过权限获取菜单 并缓存
	 */
	protected function _GetMenu($_Key=['id'=>'id','children'=>'children']) {
		$_Uid = $this->_Uid;
		// 获取后台菜单缓存
		$_Admin_Menu = session ( 'admin.menu_' . $_Uid );
		// 如果缓存菜单数量小于1，或者运行状态（RUN_STA）不为1（生产环境），即读取菜单
		if (count ( $_Admin_Menu ) != 999) {
			// 判断当前用户，是否是超级用户中的用户
			if (in_array ( $_Uid, config ( 'auth_super_admin' ) )) {
				// 是超级用户
				$_Map = [ 
						'hide' => 0,
						'status' => 1 
				];
			} else {
				// 实例化Auth权限管理类
				$_Auth = new \sys\Auth();
				// 获取当前用户 所在的所有组（即一个用户可以存在于多个用户组中）
				$_Group_List = $_Auth->getGroups ( $_Uid );
				// 规则ID数组
				$_Rule_List = array ();
				// 判断当前用户所在组的数量是否小于1
				if (count ( $_Group_List ) < 1) {
					// 没有任何用户组权限，返回错误
					$this->error ( '你没有系统的任何权限！', url ( 'Public/logout' ) );
				}
				// 循环所有的用户组返回数据
				foreach ( $_Group_List as $_Group_One ) {
					// 分解用户组规则号，并且与原有规则ID进行合并
					$_Rule_List = array_merge ( $_Rule_List, explode ( ',', trim ( $_Group_One ['rules'], ',' ) ) );
				}
				// 移除重复的规则ID
				$_Rule_List = array_unique ( $_Rule_List );
				// 设置查询条件为，非隐藏和启用的菜单，ID在规则ID数组中
				$_Map = [ 
					['id','in',$_Rule_List],
					['hide','eq',0],
					['status','eq',1]
				];
			}
			// 根据前面生成的查询条件 读取用户组所有权限规则
			$_Rule_Arr = db ( 'AuthRule' )->where ( $_Map )->field ( 'id as '.$_Key['id'].',p_id,name,title as text,icon as iconCls,extend,type' )->order ( 'sort asc' )->select ();
			foreach ( $_Rule_Arr as $k => $_One ) {
				$_Rule_Arr [$k] ['iconCls'] = 'tf '.$_Rule_Arr [$k] ['iconCls'];
				if($_One['type']!=0){
					if(empty($_One['name'])){
						if(empty($_One['extend'])){
							$_Rule_Arr[$k]['url'] = '';
						}else{
							$_Rule_Arr[$k]['url'] = $_One['extend'];
						}
					}else{
						$_Rule_Arr[$k]['url'] = url ($_One['name']).$_One['extend'];
					}
				}else{
					$_Rule_Arr[$k]['url'] = '';
				}
			}
			// 对规则进行 有键值的树状化
			$_Admin_Menu = _Ext_ListToTree ( $_Rule_Arr, $_Key['id'], 'p_id', $_Key['children'], 1 );
			// 清空原有规则数据
			session ( 'admin.menu_' . $_Uid, null );
			// 对Session中的缓存进行覆盖
			session ( 'admin.menu_' . $_Uid, $_Admin_Menu );
		}
		return $_Admin_Menu;
	}
}